/*
  秘密代码
  题目描述
    奶牛正在试验秘密代码，并设计了一种方法来创建一个无限长的字符串作为其代码的一部分使用。
    给定一个字符串，对字符串进行一次操作（每一次正确的操作，最后一个字符都会成为新的第一个字符），
    然后把操作后的字符串放到操作前的字符串的后面。
    也就是说，给定一个初始字符串，之后的每一步都会增加当前字符串的长度。

    给定初始字符串和 N，请帮助奶牛计算无限字符串中位置为 N 的字符。

    第一行输入一个字符串。该字符串包含最多 30 个大写字母，数据保证 N ≤ 10^18。
    第二行输入一个整数 N。
      请注意，数据可能很大，放进一个标准的 32 位整数容器可能不够，
      所以你可能要使用一个 64 位的整数容器（例如，在 C/C++ 中是 long long）。
    请输出从初始字符串生成的无限字符串中的下标为 N 的字符。第一个字符的下标是 N = 1。
  输入格式
    一个全大写字符的字符串，且长度不超过 30。然后是一个整数 N，不大于 10^18。
  输出格式
    字符串的第 N 个字符的值。
  输入数据 1
    COW 8
  输出数据 1
    C
  说明/提示
    In this example, the initial string COW expands as follows:
      COW -> COWWCO -> COWWCOOCOWWCO
*/

#include <bits/stdc++.h>

using namespace std;

string a;    // 输入的字符串
long long L; // 表示字符串 a 的长度

/*
  关键 idea:
    如果最少 x 次操作才能生成 k 个字符, 这个字符一定在第 x - 1 次操作生成的字符串中可以找到,
      即和第 x - 1 次操作生成的第 num 个字符相同!
    因此, 我们可以用递归的方法来求该字符!
  再进一步, 我们可以确定递归退出条件：
    当第一次输入的原始字符串长度大于要查找的下标 k时，可以直接输出对应的字符!
*/

/*
  该函数用来求无限字符串中的第 k 个位置对应的字符
  输入参数
    k -- 表示无限字符串中的第 k 个位置
    x -- 表示生成包含第 k 个字符的字符串需要的最小操作数
  返回值
    无限字符串中第 k 个位置对应的字符
  说明:
    为了避免程序运行超时，在 main 函数中计算 x，并作为参数传入递归函数 f，
    和 "在递归函数中针对 k 直接计算 x" 的方法相比，这种方法可以减少总的计算量!
*/
char f(long long k, long long x) {
    if (k <= L) {
        return a[k - 1];
    } else {
        /*
          关键 idea:
            如果最少 x 次操作才能生成 k 个字符, 这个字符一定在第 x - 1 次操作生成的字符串中可以找到,
            即和第 x - 1 次操作生成的第 num 个字符相同!
        */

        /* 计算第 x - 1 次操作后生成的字符串中哪个位置 (num) 的字符和第 k 个位置的字符相同 */
        long long num = 0;  // 上一次(第 x - 1 次)操作后生成的字符串中的第 num 个位置的字符 和第 k 个位置的字符相同
        long long l = L * pow(2, x - 1); // 表示上一次(第 x - 1 次)操作后生成的字符串的长度
        if (k - l == 1) {
            num = l;
        } else {
            num = k - l - 1;
        }

        /* 计算最少需要多少次(x1 次)操作才能生成包含第 num 个字符的字符串  */
        int x1 = 0;
        for (int i = x - 1; i >= 0; i--) {
            if (L * pow(2, i) >= num) {
                x1 = i;
            }
        }

        /*
          递归调用, 求字符串中第 num 个位置的字符串对应的字符!
          其中输入参数 x1 表示生成包含第 num 个字符的字符串最少需要多少次操作!
        */
        return f(num, x1);
    }
}

int main() {
    long long n;
    long long x = 1;

    cin >> a;
    L = a.size();

    cin >> n;
    if (L >= n) {
        cout << a[n - 1];
    } else {
        for (long long i = 1; L * pow(2, i) < n; i++) {
            x++;
        }

        char sum = f(n, x);
        cout << sum;
    }

    return 0;
}